home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 019 / 123util.arc / 123RANGE.BAS next >
Encoding:
BASIC Source File  |  1980-01-01  |  8.1 KB  |  213 lines

  1. 10    ' 123RANGE.BAS    List Lotus Range Names used in a spreadsheet file (.wks)20    '
  2. 20    ' Charles H. Greene dba ISM                           April 23, 1983
  3. 30    ' 150 West First Street                        Rev.1  May   20, 1983
  4. 40    ' New Richmond, Wi   54017     <715> 246-6690
  5. 50    '
  6. 60    ' Lotus v1.0 does not provide for listing Range Names that have been
  7. 70    ' assigned..this program provides a modest solution to that problem.
  8. 90    '
  9. 100   ' Range Name           FLD.CNT()
  10. 110   '  Specification       1...5...10....5...20....5.28
  11. 120   '                      AAAAAAAAAAAAAAABCCDDEEFFGGGG
  12. 130   '   where
  13. 140   '    A=range name            00h is used in place of space 20h
  14. 150   '    B=unknown               00h
  15. 160   '    C=begining column       low/high byte format value is 1 less
  16. 170   '    D=         row          than actual value ie.2048=FF07h
  17. 180   '    E=ending column
  18. 190   '    F=       row
  19. 200   '    G=seperators            0B 00 18 00h
  20. 210   '
  21. 220   '
  22. 1000   DEFINT A-Z
  23. 1010   DIM RANGE$(500)
  24. 1020   RCNT=0: RMAX=500
  25. 1030   BLACK=0: WHITE=7: BRIGHT=16: FG=WHITE: BG=BLACK
  26. 1040   FALSE=0: TRUE=NOT FALSE
  27. 1050   END.OF.FILE=FALSE
  28. 1060   FF$=CHR$(12)
  29. 1070   X=0: Y=0: Z=0
  30. 1080   X$=""
  31. 1090                                     'characters seperating range names
  32. 1100   LOTUS.CTL$(1)=CHR$(11)            'Range Name fields begin with this
  33. 1110   LOTUS.CTL$(2)=CHR$(0)             '  sequence of characters (1)-(4)
  34. 1120   LOTUS.CTL$(3)=CHR$(24)            'any break in this sequence ends
  35. 1130   LOTUS.CTL$(4)=CHR$(0)             '  the range names
  36. 5000  '
  37. 5010  ' Load table of column codes
  38. 5020  '
  39. 5030  DIM COL$(256)
  40. 5040  FOR X = 0 TO 255
  41. 5050     READ COL$(X)
  42. 5060  NEXT
  43. 5070  '
  44. 5080  ' Print Headings
  45. 5090  '
  46. 5100  PRINT
  47. 5110  KEY OFF: CLS: LOCATE ,,0
  48. 5120  HEAD1$="List Lotus(tm) Range Names                             123RANGE <ISM>": PRINT HEAD1$
  49. 5130  PRINT
  50. 5140  '
  51. 5150  ' Get Lotus filespec
  52. 5160  '
  53. 5170  ON ERROR GOTO 15000
  54. 5180  PRINT "Enter LOTUS spreadsheet filespec : ";
  55. 5190  INPUT "",FILE$
  56. 5200  Z=INSTR(FILE$,".")                'make sure it has .wks extension
  57. 5210  IF Z=0 THEN FILE$=FILE$+".WKS"
  58. 5220  OPEN FILE$ AS #1 LEN=1
  59. 5230  FIELD #1,1 AS X$
  60. 5240  FCB=VARPTR(#1)                    'address FCB
  61. 5250  Z=PEEK(FCB)                       'file type must be random
  62. 5260  IF Z<>4 THEN CLOSE #1: GOTO 5140
  63. 5270  RCDLIMIT!=((PEEK(FCB+19)*256)*256)+PEEK(FCB+17)+(256*PEEK(FCB+18))
  64. 5280  IF RCDLIMIT!=0 THEN CLOSE #1: PRINT: PRINT "**** File not found ****": GOTO 5140
  65. 5290  PRINT: PRINT: PRINT "File contains "RCDLIMIT!"bytes.": PRINT: PRINT
  66. 5300  HEAD2$="File: "+FILE$+SPACE$(49-LEN(FILE$))+DATE$+"  "+LEFT$(TIME$,5)
  67. 6000  '
  68. 6010  ' Process
  69. 6020  '
  70. 6030  GOSUB 8000                        'get byte
  71. 6040  FLD.CNT=1: RANGE.NAME$=""
  72. 6050  WHILE NOT END.OF.FILE
  73. 6060      ON MATCH.CNT+1 GOSUB 10000, 10060, 10100, 10140, 11000
  74. 6070      GOSUB 8000
  75. 6080  WEND
  76. 7000  '
  77. 7010  ' End of Input
  78. 7020  '
  79. 7030  PRINT: PRINT: PRINT "< END OF LIST >"
  80. 7040  PRINT: PRINT
  81. 7050  INPUT "Output to Printer (Y/N) ";ANS$
  82. 7060  IF ANS$="Y" OR ANS$="y" THEN GOSUB 16000
  83. 7070  END                               'done
  84. 8000  '
  85. 8010  ' Read file
  86. 8020  '
  87. 8030  RCDNO!=RCDNO!+1                   'set next random record(byte) no.
  88. 8040                                    'check for end of file
  89. 8050  IF RCDNO!>RCDLIMIT! THEN END.OF.FILE=TRUE: X$="": GOTO 8070
  90. 8060  GET #1,RCDNO!
  91. 8070  RETURN
  92. 10000 '
  93. 10010 ' Look for start of range names 0Bh 00h 18h 00h
  94. 10020 '
  95. 10030 IF X$<>CHR$(11) THEN MATCH.CNT = 0:RETURN
  96. 10040 MATCH.CNT=1
  97. 10050 RETURN
  98. 10060 '
  99. 10070 IF X$<>CHR$(0)  THEN MATCH.CNT = 0: GOTO 10000
  100. 10080 MATCH.CNT=2
  101. 10090 RETURN
  102. 10100 '
  103. 10110 IF X$<>CHR$(24) THEN MATCH.CNT = 0: GOTO 10000
  104. 10120 MATCH.CNT=3
  105. 10130 RETURN
  106. 10140 '
  107. 10150 IF X$<>CHR$(0)  THEN MATCH.CNT = 0: GOTO 10000
  108. 10160 MATCH.CNT=4
  109. 10170 RETURN
  110. 11000 '
  111. 11010 ' Range name fields found
  112. 11020 '
  113. 11030 IF FLD.CNT > 15 GOTO 11070
  114. 11040 IF X$<>CHR$(0) THEN RANGE.NAME$=RANGE.NAME$+X$
  115. 11050 FLD.CNT=FLD.CNT+1
  116. 11060 RETURN
  117. 11070 IF FLD.CNT > 18 GOTO 11110
  118. 11080 IF FLD.CNT = 17 THEN RANGE.BEG.COL=ASC(X$)
  119. 11090 FLD.CNT=FLD.CNT+1
  120. 11100 RETURN
  121. 11110 IF FLD.CNT > 20 GOTO 11170
  122. 11120 IF FLD.CNT = 19 THEN RANGE.BEG.ROW=ASC(X$): GOTO 11150
  123. 11130 R=ASC(X$): IF R>8 THEN R=8
  124. 11140 RANGE.BEG.ROW=RANGE.BEG.ROW+(R*256)
  125. 11150 FLD.CNT=FLD.CNT+1
  126. 11160 RETURN
  127. 11170 IF FLD.CNT > 22 GOTO 11210
  128. 11180 IF FLD.CNT = 21 THEN RANGE.END.COL=ASC(X$)
  129. 11190 FLD.CNT=FLD.CNT+1
  130. 11200 RETURN
  131. 11210 IF FLD.CNT > 24 GOTO 11400
  132. 11220 IF FLD.CNT = 23 THEN RANGE.END.ROW=ASC(X$): FLD.CNT=FLD.CNT+1: RETURN
  133. 11230 '       row must be 1-2048
  134. 11240 R=ASC(X$): IF R>8 THEN R=8
  135. 11250 RANGE.END.ROW=RANGE.END.ROW+(R*256)
  136. 11260 '
  137. 11270 ' Print range entry
  138. 11280 '
  139. 11290 IF RCNT=RMAX THEN PRINT "*** RANGE$ ARRAY EXCEEDED ***": END
  140. 11300 RCNT=RCNT+1
  141. 11310 PRINT USING "\              \";RANGE.NAME$;
  142. 11320 RANGE.BEG$=COL$(RANGE.BEG.COL)+MID$(STR$(RANGE.BEG.ROW+1),2)
  143. 11330 RANGE.END$=COL$(RANGE.END.COL)+MID$(STR$(RANGE.END.ROW+1),2)
  144. 11340 PRINT "   "RANGE.BEG$".."RANGE.END$"   ";
  145. 11350 IF RANGE.BEG.ROW>2047 OR RANGE.END.ROW>2047 THEN PRINT "*** Out of bounds ***" ELSE PRINT
  146. 11360 RANGE.NAME$=RANGE.NAME$+SPACE$(17-LEN(RANGE.NAME$))
  147. 11370 RANGE$(RCNT)=RANGE.NAME$+"  "+RANGE.BEG$+".."+RANGE.END$
  148. 11380 FLD.CNT=FLD.CNT+1: RANGE.NAME$=""
  149. 11390 RETURN
  150. 11400 IF X$<>LOTUS.CTL$(FLD.CNT-24) THEN END.OF.FILE=TRUE
  151. 11410 IF FLD.CNT < 28 THEN FLD.CNT=FLD.CNT+1 ELSE FLD.CNT=1
  152. 11420 RETURN
  153. 15000 '
  154. 15010 ' Error traps
  155. 15020 '
  156. 15030 IF ERR=57 THEN PRINT: PRINT "**** I/O Error         ****": END
  157. 15040 IF ERR<24 OR ERR>25 GOTO 15090
  158. 15050 IF ERL = 5210 THEN 15110
  159. 15060 IF ERL<>8060 GOTO 15140
  160. 15070 PRINT:PRINT "**** Check disk drive -- press any key to continue ****"
  161. 15080 CHAR$=INKEY$: IF CHAR$="" THEN 15070 ELSE RESUME
  162. 15090 '   Disk file open errors
  163. 15100 GOTO 15170
  164. 15110 '   Disk I/O errors
  165. 15120 IF ERR=62 OR ERR=63 THEN END.OF.FILE=TRUE: X$="": RESUME 8070
  166. 15130 GOTO 15170
  167. 15140 '
  168. 15150 PRINT:PRINT "**** Check printer -- press any key to continue ****"
  169. 15160 CHAR$=INKEY$: IF CHAR$="" THEN 15160 ELSE RESUME
  170. 15170 '
  171. 15180 IF ERR=6 THEN RESUME NEXT
  172. 15190 PRINT "ERROR #"ERR" IN LINE "ERL
  173. 15200 ON ERROR GOTO 0
  174. 16000 '
  175. 16010 ' List ranges to printer in columns
  176. 16020 '
  177. 16030 C1=1: C2=(RCNT+1)/2: RMAX=C2-1: LINE.CNT=99: PAGE.CNT=0
  178. 16040 IF LINE.CNT>56 THEN GOSUB 16150           ' Page heading
  179. 16050 LPRINT RANGE$(C1);
  180. 16060 X=LEN(RANGE$(C1)): LPRINT SPC(40-X);
  181. 16070 LPRINT RANGE$(C2)
  182. 16080 LINE.CNT=LINE.CNT+1
  183. 16090 IF C1<RMAX THEN C1=C1+1: C2=C2+1: GOTO 16040
  184. 16100 '                                           Finish report
  185. 16110 LPRINT:LPRINT
  186. 16120 LPRINT "< END OF LIST >"
  187. 16130 LPRINT CHR$(12)
  188. 16140 RETURN
  189. 16150 '
  190. 16160 ' Page overflow
  191. 16170 '
  192. 16180 LPRINT CHR$(12)                           ' top of form
  193. 16190 LINE.CNT=4: PAGE.CNT=PAGE.CNT+1
  194. 16200 LPRINT HEAD1$"  Page ";
  195. 16210 LPRINT USING "###";PAGE.CNT
  196. 16220 LPRINT HEAD2$
  197. 16230 LPRINT:LPRINT
  198. 16240 RETURN
  199. 60000 '
  200. 60010 ' Col Subscript
  201. 60020 '
  202. 60030 DATA A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
  203. 60040 DATA AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,AZ
  204. 60050 DATA BA,BB,BC,BD,BE,BF,BG,BH,BI,BJ,BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,BX,BY,BZ
  205. 60060 DATA CA,CB,CC,CD,CE,CF,CG,CH,CI,CJ,CK,CL,CM,CN,CO,CP,CQ,CR,CS,CT,CU,CV,CW,CX,CY,CZ
  206. 60070 DATA DA,DB,DC,DD,DE,DF,DG,DH,DI,DJ,DK,DL,DM,DN,DO,DP,DQ,DR,DS,DT,DU,DV,DW,DX,DY,DZ
  207. 60080 DATA EA,EB,EC,ED,EE,EF,EG,EH,EI,EJ,EK,EL,EM,EN,EO,EP,EQ,ER,ES,ET,EU,EV,EW,EX,EY,EZ
  208. 60090 DATA FA,FB,FC,FD,FE,FF,FG,FH,FI,FJ,FK,FL,FM,FN,FO,FP,FQ,FR,FS,FT,FU,FV,FW,FX,FY,FZ
  209. 60100 DATA GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK,GL,GM,GN,GO,GP,GQ,GR,GS,GT,GU,GV,GW,GX,GY,GZ
  210. 60110 DATA HA,HB,HC,HD,HE,HF,HG,HH,HI,HJ,HK,HL,HM,HN,HO,HP,HQ,HR,HS,HT,HU,HV,HW,HX,HY,HZ
  211. 60120 DATA IA,IB,IC,ID,IE,IF,IG,IH,II,IJ,IK,IL,IM,IN,IO,IP,IQ,IR,IS,IT,IU,IV
  212. 65399 '** DONE - PRESS ENTER TO RETURN TO MENU **
  213. 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111